/**
 * Google 登录认证工具类
 * 功能：封装授权URL生成、Token交换、用户信息获取等逻辑
 */

// Google OAuth 配置（需替换为你的实际值）
const GOOGLE_CONFIG = {
  clientId: '401486604632-assc3ndq4fllm915ncpa3jj2p630qn0s.apps.googleusercontent.com', // 替换为你的客户端ID
  clientSecret: 'YOUR_CLIENT_SECRET',                  // 替换为你的客户端密钥（仅后端使用）
  redirectUri: 'https://your-car-domain.com/auth/google/callback', // 必须与Google Cloud Console配置一致
  scope: 'profile email',                             // 请求的用户数据权限
  authUrl: 'https://accounts.google.com/o/oauth2/v2/auth', // 固定不变
  tokenUrl: 'https://oauth2.googleapis.com/token',    // 固定不变
  userInfoUrl: 'https://www.googleapis.com/oauth2/v2/userinfo' // 固定不变
};

export default {
  /**
   * 生成Google授权URL
   * @returns {string} 授权URL
   */
  generateAuthUrl() {
    const state = Math.random().toString(36).substring(2, 15); // 随机state参数防CSRF
    const params = {
      client_id: GOOGLE_CONFIG.clientId,
      redirect_uri: GOOGLE_CONFIG.redirectUri,
      response_type: 'code',
      scope: GOOGLE_CONFIG.scope,
      state: state,
      access_type: 'offline', // 获取refresh_token
      prompt: 'consent'      // 强制显示授权页面
    };
    return `${GOOGLE_CONFIG.authUrl}?${new URLSearchParams(params).toString()}`;
  },

  /**
   * 处理授权回调（通过code获取用户信息）
   * @param {string} code - Google返回的授权码
   * @returns {Promise<object>} 标准化后的用户数据
   */
  async handleAuthCallback(code) {
    try {
      // 1. 使用code换取access_token（实际项目中应由后端完成此步骤！）
      const tokenResponse = await uni.request({
        url: GOOGLE_CONFIG.tokenUrl,
        method: 'POST',
        data: {
          code: code,
          client_id: GOOGLE_CONFIG.clientId,
          client_secret: GOOGLE_CONFIG.clientSecret, // 注意：前端不应暴露client_secret，此处仅为示例
          redirect_uri: GOOGLE_CONFIG.redirectUri,
          grant_type: 'authorization_code'
        },
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        }
      });

      // 2. 获取用户信息
      const userInfoResponse = await uni.request({
        url: GOOGLE_CONFIG.userInfoUrl,
        method: 'GET',
        header: {
          'Authorization': `Bearer ${tokenResponse.data.access_token}`
        }
      });

      // 3. 标准化用户数据（适配车企App需求）
      return this._normalizeUserData(userInfoResponse.data);
    } catch (error) {
      console.error('[Google登录] 错误:', error);
      throw new Error('Google登录失败，请重试');
    }
  },

  /**
   * 标准化用户数据（私有方法）
   * @private
   */
  _normalizeUserData(googleUser) {
    return {
      id: googleUser.id,           // Google用户ID
      name: googleUser.name,        // 用户名
      email: googleUser.email,      // 邮箱（车企App重要字段）
      avatar: googleUser.picture,   // 头像URL
      // 车企App扩展字段
      isVerified: false,            // 是否验证（后续流程设置）
      carInfo: null,               // 车辆信息（需用户绑定后更新）
      membership: 'standard'       // 会员等级
    };
  }
};